package com.qinghuan.designMode.prePrinciple.segregation;

/**
 * @Auther: qinghuan
 * @Date: 2022/2/16 20:51
 * @Description:接口隔离原则（改进）
 * 类能够实现接口下的几个方法，那个接口就写几个方法，不要出现没有用到的 接口下的方法
 * 接口下的方法可以被重复使用，但是不要同一个方法在不同的接口重复实现
 *
 * 客户端不应该依赖它不需要的接口，即一个类的依赖应该建立在最小的接口上，
 * 这样，解决的方法是 对接口的方法进行拆解，保证类在调用某个接口的时候尽量没有多余的方法
 */
public class segregation2 {

    public static void main(String[] args) {
        A1 a1 = new A1();
        a1.depend1(new B1());
        a1.depend2(new B1());
    }

}
//模型飞机
interface Interface11{
    void operation1();
}
//燃油机
interface Interface2{
    void operation2();
    void operation3();
}
//燃气机
interface Interface3{
    void operation4();
    void operation5();
}

//实现了可以做模型机 拥有燃油机的功能的飞机
class B1 implements Interface11,Interface2{
    public void operation1() {
        System.out.println("B1实现了 operation1");
    }

    public void operation2() {
        System.out.println("B1实现了 operation2");
    }

    public void operation3() {
        System.out.println("B1实现了 operation3");
    }
}

class D1 implements Interface11,Interface3 {
    public void operation1() {
        System.out.println("D1实现了 operation1");
    }

    public void operation4() {
        System.out.println("D1实现了 operation4");
    }

    public void operation5() {
        System.out.println("D1实现了 operation5");
    }
}

//相当于人来操纵飞机
class A1{
    public void depend1(Interface11 interface1) {
        interface1.operation1();
    }
    public void depend2(Interface2 i) {
        i.operation2();
    }
    public void depend3(Interface2 i) {
        i.operation3();
    }
}

class C1{
    public void depend1(Interface11 i){
        i.operation1();
    }
    public void depend4(Interface3 i) {
        i.operation4();
    }
    public void depend5(Interface3 i) {
        i.operation5();
    }
}